import router from "./router";
import store from "./store";
import { Message } from "element-ui";
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
import { getToken } from "@/utils/auth";
import getPageTitle from "@/utils/get-page-title";

NProgress.configure({
  showSpinner: false,
}); // NProgress Configuration

const whiteList = ["/login", "/auth-redirect", "/jump", "/viewDocument"]; // no redirect whitelist   分享链接预览文件/viewDocument

router.beforeEach(async (to, from, next) => {
  //系统参数
  // alert(JSON.stringify(to))
  // console.log("to,from", to, from);
  let applicationId = "";

  if (!from.query.applicationId) {
    applicationId = to.query.applicationId;
    //  to.query.applicationId = from.query.applicationId
  } else {
    applicationId = from.query.applicationId;
  }
  //无参数 默认为1
  if (!applicationId) applicationId = "all";
  // start progress bar
  NProgress.start();

  // set page title
  // document.title = getPageTitle(to.meta.title, to.meta.zhTitle)
  document.title = to.meta.zhTitle;

  // determine whether the user has logged in
  const hasToken = getToken();
  if (hasToken) {
    if (to.path == "/viewDocument") {
      next();
      NProgress.done();
    } else {
      if (
        store.getters.isLock &&
        to.path !== "/lockScreen" &&
        to.path !== "/login"
      ) {
        next({
          path: "/lockScreen",
          query: { applicationId: applicationId },
        });
        NProgress.done();
      } else if (to.path === "/login") {
        // if is logged in, redirect to the home page
        next({
          path: "/",
          query: { applicationId: applicationId },
        });
        NProgress.done();
      } else {
        const hasMenu =
          store.getters.menuList && store.getters.menuList.length > 0;
        if (hasMenu) {
          if (to.query.applicationId) {
            next();
            // }
          } else {
            to.query.applicationId = applicationId;
            next({ ...to });
          }
        } else {
          try {
            // get user info
            let res = await store.dispatch("user/getInfo");

            const accessRoutes = await store.dispatch(
              "permission/generateRoutes",
              res
            );
            // dynamically add accessible routes
            router.addRoutes(accessRoutes);

            // hack method to ensure that addRoutes is complete
            // set the replace: true, so the navigation will not leave a history record

            next({
              ...to,
              replace: true,
            });
          } catch (error) {
            console.log(error, "000000");
            // remove token and go to login page to re-login
            await store.dispatch("user/resetToken");
            if (error && typeof error == "string")
              Message.error(error || "Has Error");
            if (to.query) {
              var params = "";
              for (var key in to.query) {
                if (to.query.hasOwnProperty(key)) {
                  if (key != "applicationId") {
                    var value = to.query[key];
                    params += "&" + key + "=" + value;
                    // console.log(key + ": " + value);
                  }
                }
              }
              // next(`/login-home-portal?redirect=${to.path}}&applicationId=${applicationId}${params}`)
              next(
                `/login?redirect=${to.path}&applicationId=${applicationId}${params}`
              );
            } else {
              // next(`/login-home-portal?redirect=${to.path}}&applicationId=${applicationId}`)
              next(`/login?redirect=${to.path}&applicationId=${applicationId}`);
            }

            NProgress.done();
          }
        }
      }
    }
  } else {
    /* has no token*/
    if (whiteList.indexOf(to.path) !== -1) {
      // in the free login whitelist, go directly
      if (to.path == "/viewDocument") {
        next();
      } else {
        if (to.query.applicationId) {
          next();
        } else {
          to.query.applicationId = applicationId;
          next({ ...to });
        }
      }
    } else {
      // other pages that do not have permissionEle to access are redirected to the login page.
      // if (to.path == '/login-home-portal') {
      if (to.path == "/login") {
        if (to.query.applicationId) {
          next();
        } else {
          to.query.applicationId = applicationId;
          next({ ...to });
        }
        return;
      }
      if (to.query) {
        var params = "";
        for (var key in to.query) {
          if (to.query.hasOwnProperty(key)) {
            if (key != "applicationId") {
              var value = to.query[key];
              params += "&" + key + "=" + value;
              // console.log(key + ": " + value);
            }
          }
        }
        // next(`/login-home-portal?redirect=${to.path}}&applicationId=${applicationId}${params}`)
        next(
          `/login?redirect=${to.path}&applicationId=${applicationId}${params}`
        );
      } else {
        // next(`/login-home-portal?redirect=${to.path}}&applicationId=${applicationId}`)
        next(`/login?redirect=${to.path}&applicationId=${applicationId}`);
      }
      NProgress.done();
    }
  }
});

router.afterEach(() => {
  // finish progress bar
  NProgress.done();
});
